<?php
require_once('Vega/Dao/Table.php');

class Mobitv_Admin_EncodeDao extends Vega_Dao_Table
{
    /*
     * Hàm xóa một list nhóm cấu hình (!dangerous)
     *
     * @param       array $list (int)
     */
     public function deleteEncodeConfigGroupFromList($list) {
        return true;
     }

    /*
     * Hàm xóa một nhóm cấu hình (!dangerous)
     * Chỉ thực hiện DELETE khi không có member nào thuộc nhóm cấu hình (check ở bảng mem_assignment)
     * @param       int $id
     */
     public function deleteEncodeConfigGroup($id) {
        return true;
     }

    /*
     * Hàm thêm một nhóm cấu hình
     * @param       array $data
     *                      'group_name', 'group_description',
     *                      'config_id'
     */
    public function addEncodeConfigGroup($data) {
        $configId       = intval($data['config_id']);
        $description    = $this->_db->valueQuote($data['group_description']);
        $name           = $this->_db->valueQuote($data['group_name']);
        $userId         = intval($_SESSION['userid']);
        $sql = "INSERT INTO encode_config_group
                SET config_id=$configId,
                    name=$name,
                    description=$description,
                    updatedTime=now(),
                    createdTime=now(),
                    updatedBy=$userId
            ";
        return $this->_db->queryWrite($sql);
    }

    /*
     * Hàm thêm một tập cấu hình (bảng encode_config), và level 1 ứng với nó (bảng encode_config_detail)
     * @param   array $data
     *                  'config_name', 'config_description', 'exportcount', 'pwidth', 'pheight', 'starttime', //config
     *                  'framerate', 'videocodec', 'vwidth', 'vheight', 'vbitrate', 'abitrate', 'qmax', 'qmin', 'name', 'quality' //level
     */
    public function addEncodeConfig($data) {
        $configName             = $this->_db->valueQuote($data['config_name']);
        $configDescription      = $this->_db->valueQuote($data['config_description']);
        $exportcount            = intval($data['exportcount']);
        $pwidth                 = intval($data['pwidth']);
        $pheight                = intval($data['pheight']);
        $starttime              = intval($data['starttime']);
        $userId = intval($_SESSION['userid']);
        $sql1 = "INSERT INTO encode_config
                 SET name=$configName,
                     description=$configDescription,
                     exportcount=$exportcount,
                     pwidth=$pwidth,
                     pheight=$pheight,
                     starttime=$starttime,
                     updatedTime=now(),
                    createdTime=now(),
                    updatedBy=$userId
            ";
        $ret1 = $this->_db->queryWrite($sql1);
        if (!$ret1) return false;

        // inserted id
        $configId = intval($this->getLastInsertId());
        // add level
        $name       = $this->_db->valueQuote($data['name']);
        $quality    = $this->_db->valueQuote($data['quality']);
        $videocodec = $this->_db->valueQuote($data['videocodec']);
        $vwidth     = intval($data['vwidth']);
        $vheight    = intval($data['vheight']);
        $vbitrate   = intval($data['vbitrate']);
        $abitrate   = intval($data['abitrate']);
        $qmax       = intval($data['qmax']);
        $qmin       = intval($data['qmin']);
        $framerate  = intval($data['framerate']);

        $sql2 = "INSERT INTO encode_config_detail
                 SET framerate=$framerate,
                     videocodec=$videocodec,
                     vwidth=$vwidth,
                     vheight=$vheight,
                     vbitrate=$vbitrate,
                     abitrate=$abitrate,
                     qmax=$qmax,
                     qmin=$qmin,
                     name=$name,
                     quality=$quality,
                     config_id=$configId,
                     level=1
                ";
        $ret2 = $this->_db->queryWrite($sql2);
        return $ret2;
    }

    public function getLastInsertId() {
        return $this->_db->getLastInsertId();
    }
    
    /*
     * Hàm lấy danh sách các tập cấu hình
     */
    public function getListEncodeConfig() {
        $sql = "SELECT ec.*, admin.name as updater FROM encode_config ec LEFT JOIN admin ON updatedBy=admin.id";
        $this->_db->query($sql);
        return $this->_db->fetchRowSet();
    }

    public function getEncodeConfigDetail($id) {
        $sql = "SELECT ec.id, ec.name as config_name, ec.exportcount, ec.starttime, ec.pwidth, ec.pheight, ecd.* FROM encode_config ec LEFT JOIN encode_config_detail ecd ON ec.id=ecd.config_id
                WHERE ec.id=$id ORDER BY ecd.level ASC";
        $this->_db->query($sql);
        return $this->_db->fetchRowSet();
    }

    public function getEncodeConfig($id) {
        $sql = "SELECT * FROM encode_config WHERE id=$id";
        $this->_db->query($sql);
        return $this->_db->fetchRow();
    }

    public function getEncodeConfigLevel($id, $level) {
        $sql = "SELECT ec.id, ec.name as config_name, ec.pwidth, ec.pheight, ecd.* FROM encode_config ec LEFT JOIN encode_config_detail ecd ON ec.id=ecd.config_id
                WHERE ec.id=$id AND level=$level";
        $this->_db->query($sql);
        return $this->_db->fetchRow();
    }

    /*
     * Hàm cập nhật các thông số chung cho các level
     * của cùng một tập cấu hình
     * @param       int $id
     * @param       array $data
     */
    public function saveEncodeConfig($id, $data) {
        $pairs = array();
        $userId = $_SESSION['userid'];
        foreach ($data as $field => $value) {
            if ($field != 'watermark')
                $pairs[] = '`' . $field . '`=' . $this->_db->valueQuote($value);
            else
                $pairs[] = '`watermark`=\'' . $value . '\'';
        }
        $sql = "UPDATE encode_config SET updatedTime=now(), updatedBy=$userId, " . implode(',', $pairs) . " WHERE id=$id";
        return $this->_db->queryWrite($sql);
    }

    /*
     * Hàm cập nhật các thông số cấu hình
     * ứng với một level (bảng encode_config_detail)
     */
    public function saveEncodeConfigLevel($id, $level, $data) {
        $pairs = array();
        foreach ($data as $field => $value) {
            $pairs[] = '`' . $field . '`=' . $this->_db->valueQuote($value);
        }
        
        $sql = "UPDATE encode_config_detail SET " . implode(',', $pairs) . " WHERE level=$level AND config_id=$id";
        return $this->_db->queryWrite($sql);
    }
    
    /*
     * Hàm lấy max level trong các config detail của một tập cấu hình
     * @param       int $id
     * @return      -1 ~ không có tập cấu hình
     *              >=0 ~ có tập cấu hình
     */
    public function getMaxLevelOfEncodeConfig($id) {
        $sql = "SELECT config_id, MAX(level) as max FROM encode_config_detail WHERE config_id=$id GROUP BY config_id";
        $this->_db->query($sql);
        $row = $this->_db->fetchRow();
        if (!$row) return -1;
        else return $row['max'];
    }
    
    /*
     * Hàm thêm mới một level cho một tập cấu hình
     */
    public function addEncodeConfigLevel($id, $data) {
        $pairs = array();
        foreach ($data as $field => $value) {
            $pairs[] = '`' . $field . '`=' . $this->_db->valueQuote($value);
        }
        $id = intval($id);
        $pairs[] = "`config_id`=$id";

        $sql = "INSERT INTO encode_config_detail SET " . implode(',', $pairs);
        return $this->_db->queryWrite($sql);
    }
    
    /*
     * Hàm lấy dữ liệu ảnh thủy ký của tập config
     */
    public function getWaterMark($id) {
        $sql = "SELECT watermark from encode_config WHERE id=$id";
        $this->_db->query($sql);
        $row = $this->_db->fetchRow();
        if (!$row) return false;
        return $row['watermark'];
    }
    /*
     * Hàm lấy danh sách nhóm các tập cấu hình
     */
    public function getListEncodeConfigGroup() {
        $sql = "SELECT ecg.id as group_id,
                       ecg.name as group_name,
                       ecg.config_id as config_id,
                       ec.name as config_name
                FROM encode_config_group ecg LEFT JOIN encode_config ec ON ecg.config_id = ec.id";
        $this->_db->query($sql);
        return $this->_db->fetchRowSet();
    }

    public function getEncodeConfigGroupDetail($id) {
        $sql = "SELECT ecg.id as group_id,
                       ecg.name as group_name,
                       ecg.config_id as config_id,
                       ecg.description as group_description,
                       ec.name as config_name
                FROM encode_config_group ecg LEFT JOIN encode_config ec ON ecg.config_id = ec.id
                WHERE ecg.id=$id";
        $this->_db->query($sql);
        return $this->_db->fetchRow();
    }

    /*
     * Hàm lưu thông tin nhóm cấu hình
     * @param       int $id
     * @param       array $data
     */
    public function saveEncodeConfigGroup($id, $data) {
        $userId = $_SESSION['userid'];
        $name = $this->_db->valueQuote($data['name']);
        $description = $this->_db->valueQuote($data['description']);
        $config_id = intval($data['config_id']);
        $sql = "UPDATE encode_config_group SET updatedTime=now(), updatedBy=$userId, name=$name, description=$description, config_id=$config_id WHERE id=$id";
        return $this->_db->queryWrite($sql);
    }
}